package cn.edu.nuc.bre.dto;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;

import cn.edu.nuc.bre.util.BreInfo;

/**
 * 用户以及用户所属角色包装类
 * 
 * @author Mine
 * @since 2016年11月10日_上午11:03:57
 */
public class UserInfo {
	private User user;// 用户信息
	private List<Group> groups;// 所属角色
	
	
	// 角色类型 有[管理员<1>、公告发布员<2>]、[<网点11>、网管中心<4>、职能部门<111>、行长<3>]
	// 获取姓名
	public String getName() {
		if (user == null) {
			return null;
		}
		return user.getFirstName();
	}

	// 输出角色信息
	public String getGroupInfo() {
		if (groups == null || groups.size() < 1) {
			return "没有任何权限...";
		}
		StringBuilder temp = new StringBuilder();
		Group one = getBaseGroup();
		if (one != null) {
			temp.append("[" + one.getName() + "]");
		}
		if (isNoticeOfficer()) {
			temp.append("、[公告员]");
		}
		return temp.toString();
	}

	// 验证角色权限是否正确
	public boolean hasGroupErr() {
		if (groups == null || groups.size() < 1 || groups.size() > 2) {
			return true;
		}
		if (getGroupMap() == null) {
			return true;
		}
		return false;
	}

	private Map<String, Group> getGroupMap() {
		Map<String, Group> map = new HashMap<String, Group>();
		for (Group group : groups) {
			map.put(group.getType(), group);
		}
		int size = map.size();
		System.out.println(size);
		if (size < 0 || size > 2) {
			return null;
		}
		if (size == 2 && map.get(BreInfo.GROUP_TYPE_ANNOUNCERS) == null) {// size为2且不存在公告员
			return null;
		}
		return map;
	}

	// 验证是否是公告员
	public boolean isNoticeOfficer() {
		if (groups != null && getGroupMap().get(BreInfo.GROUP_TYPE_ANNOUNCERS) != null) {
			return true;
		}
		return false;
	}

	// 获取出公告员外基本角色信息
	public Group getBaseGroup() {
		if (groups == null) {
			return null;
		}
		if (BreInfo.GROUP_TYPE_ANNOUNCERS.equals(groups.get(0).getType().trim())) {// 第一个是公告员
			if (groups.size() == 2) {
				return groups.get(1);
			} else {
				return null;
			}
		} else {
			return groups.get(0);
		}
	}

	public String getBaseGroupName() {
		Group one = getBaseGroup();
		if (one == null) {
			return "";
		} else {
			return one.getName();
		}
	}
	public String getBaseGroupType() {
		Group one = getBaseGroup();
		if (one == null) {
			return "";
		} else {
			return one.getType();
		}
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public List<Group> getGroups() {
		return groups;
	}

	public void setGroups(List<Group> groups) {
		this.groups = groups;
	}
}
